package com.javaapi.jdk8.lambda;

import org.junit.jupiter.api.Test;

import java.util.function.Supplier;

/**
 * Created by admin on 2017/6/8.
 */
public class PersonSupplyTest {

    //写PersonSupply接口的实现，常规写法，获取一个Person
    @Test
    public void getPersonByNormalWay(){
        PersonSupply sp=new PersonSupply(){//使用匿名类的写法，在Swing中很常用，尤其是对那些button等控件
            public Person get(){
                Person person=new Person();
                return person;
            }
        };
        Person person=sp.get();//获取实例
    }

    //::关键字
    @Test
    public void getPersonByJava8(){
        PersonSupply sp=Person::new; //接口实现
        Person person=sp.get();//获取实例

        PersonSupplyV2<Person> sp2=Person::new;//使用通用型接口
        Person person2=sp2.get();
    }

    //java8自带的Supplier接口就是这样实现的，后面会做介绍。直接使用Supplier如下
    @Test
    public void getPersonByJava8Supplier(){
        Supplier<Person> sp=Person::new;
        Person person=sp.get();
    }

    //测试带参数的接口
    //使用匿名类
    @Test
    public void testGetPersonWithParamByNormalWay(){
        PersonSupplyWithParams<Person> sp=new PersonSupplyWithParams<Person>(){
            public Person get(String name, int age){
                Person person=new Person(name,age);
                return person;
            }
        };//别忘记这里有个分号

        Person person=sp.get("maplejaw",20);
    }

    //使用匿名类
    @Test
    public void testGetPersonWithParamByJava8(){
        PersonSupplyWithParams<Person> sp=Person::new;
        Person person=sp.get("maplejaw",20);
    }
}
